package com.cn.wanix.model;

import com.cn.wanix.util.ResultTool;

/**
 * 懒汉模式
 * 饿汉模式
 * 双检索模式
 * 枚举模式
 * 内部类模式
 * <p>
 * 单例模式（Singleton Pattern）是一种简单的对象创建型模式。
 * 该模式保证一个类仅有一个实例，并提供一个访问它的全局访问点。
 * <p>
 * 所以要实现单例模式，要做到以下几点：
 * <p>
 * 将构造方法私有化，杜绝使用构造器创建实例。
 * 需要自身创建唯一的一个实例，并提供一个全局访问入口
 * <p>
 * 方舟 虚拟机jvm
 * c
 * c++
 * api
 * 满足单例模式必须具备条件
 * 1.构造方法私有化
 * 2.私有属性
 */
public class ResultModel<T> {
    private Integer code;//编码---0，标识成  -1 失败
    private String msg;//
    private Integer total;
    private T data;

    public ResultModel(int code, String msg, Integer total, T data) {
        this.code = code;
        this.msg = msg;
        this.total = total;
        this.data = data;
    }

    public ResultModel(T data) {
        this.data = data;
    }

    public ResultModel(Integer code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    public static ResultModel getAdd(int result) {
        return new ResultModel(result > 0 ? ResultTool.CODE_SUCCES : ResultTool.CODE_ERROR, result > 0 ? ResultTool.MSG_ADD_SUCCES : ResultTool.MSG_ADD_ERROR);
    }
    public static ResultModel getUpdate(int result) {
        return new ResultModel(result > 0 ? ResultTool.CODE_SUCCES : ResultTool.CODE_ERROR, result > 0 ? ResultTool.MSG_UPDATE_SUCCES : ResultTool.MSG_UPDATE_ERROR);
    }
    public static ResultModel getDelete(int result) {
        return new ResultModel(result > 0 ? ResultTool.CODE_SUCCES : ResultTool.CODE_ERROR, result > 0 ? ResultTool.MSG_DELETE_SUCCES : ResultTool.MSG_DELETE_ERROR);
    }
    public ResultModel(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Integer getTotal() {
        return total;
    }

    public void setTotal(Integer total) {
        this.total = total;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}
